#!/bin/sh
  # 共有ライブラリのデモ

  # 共有ライブラリのオブジェクトファイル libhello.o を作成します。

  #gcc -fPIC -Wall -g -c libhello.c
  gcc -fno-common -fPIC -Wall -g -c libhello.c
  

  # 共有ライブラリを作成します。libhello は C ライブラリに依存して
  # いるので、C ライブラリとリンクさせるために -lc オプションを使い
  # ます。

  #gcc -g -shared -Wl,-soname,libhello.so.0 -o libhello.so.0.0 libhello.o -lc
  #Macではこちら
  #バージョンが2.4.5の場合、2 が主リビジョン (非互換の API 変更)， 4 が副リビジョン (後方互換な API の変更)，5 がバグ修正(teeny)リビジョン(完全に互換性のある変更)
  gcc -g -dynamiclib -install_name libhello.0.0.0.dylib -compatibility_version 0.0 -current_version 0.0.0 -o libhello.0.0.0.dylib libhello.o -lc

  # この段階で、libhello.so.0.0 を、/usr/local/lib 等のどこかの
  # ディレクトリへコピーしてもかまいません。

  #Darwin の場合，ファイル名の他にフルパスを指定することができ（またする必要があり）ます
  #これにより，"rpath" オプションと ldconfig/ld.so.cache システムが不要になります．
  #http://www.finkproject.org/doc/porting/porting.ja.html#preparing-10.4
  
  #なのでmacにはldconfigは存在しないし、sonameとlinker nameもlnで作る
  ln -s libhello.0.0.0.dylib libhello.0.dylib
  ln -s libhello.0.0.0.dylib libhello.dylib

  gcc -Wall -g -c demo_use.c -o demo_use.o

  # demo_use プログラムを作成します。-L. オプションにより、プロ
  # グラム作成中、カレントディレクトリ "." が検索されます。これは、
  # プログラム実行時にカレントディレクトリ "." が検索されるという
  # 意味ではないので注意してください。

  gcc -g -o demo_use_shared demo_use.o -L. -lhello

  # プログラムを実行します。場合によってはDYLD_LIBRARY_PATH を使って、どこに共有
  # ライブラリが存在するかをプログラムに教える必要がある
  
 ./demo_use_shared
